package arithmetic;

import org.junit.jupiter.api.Test;

/**
 * 647. 回文子串 数目
 * 给你一个字符串 s ，请你统计并返回这个字符串中 回文子串 的数目。
 * 回文字符串 是正着读和倒过来读一样的字符串。
 * 子字符串 是字符串中的由连续字符组成的一个序列。
 * <p>
 * 具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串。
 * 示例:
 * 输入：s = "aaa"
 * 输出：6
 * 解释：6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
 * <p>
 * 链接：https://leetcode.cn/problems/palindromic-substrings
 *
 * @author jiangfeng on 2022/3/14
 */
public class HuiwensubstringSize {

    @Test
    public void test(){
        System.out.println(countSubstrings("aaaa"));
        System.out.println(countSubstrings("aaaaa"));
    }

    // 找出字符传里的最长回文串
    public int countSubstrings(String s) {
        // 中心扩展法
        int result = s.length();
        for (int i = 0; i < s.length(); i++) {
            // 单的情况 1,3,5
            int j = 1;
            // 左右不过界限
            while (i - j >= 0 && i + j < s.length()) {
                if (s.charAt(i - j) == s.charAt(i + j)) {
                    System.out.println(i+"单"+s.substring(i - j, i + j+1)+":"+(i - j)+","+(i + j));
                    j++;
                    result++;
                }else {
                    break;
                }

            }
            // 双 12,
            j = 0;
            while (i - j >= 0 && i + j + 1 < s.length()) {
                if (s.charAt(i - j) == s.charAt(i + j + 1)) {
                    System.out.println(i+"双"+s.substring(i - j, i + j+2)+":"+(i - j)+","+(i + j+1));
                    j++;
                    result++;
                }else {
                    break;
                }

            }
        }


        return result;
    }

}
